data<-read.csv('GSE25066_expr.csv',quote='',header=T,row.names=1,check.names=F)
phe<-read.csv('GSE25066_score.csv',quote='',header=T,row.names=1,check.names=F)
library(survival)
library(survminer)
mySurv=with(phe,Surv(RFS.time, RFS))
exprSet<-data
cox_results <-apply(exprSet , 1 , function(gene){
group=ifelse(gene>median(gene),'1','0')
survival_dat <- data.frame(group=group,stringsAsFactors = F)
m=coxph(mySurv ~ group,data = survival_dat)
beta <- coef(m)
se <- sqrt(diag(vcov(m)))
HR <- exp(beta)
HRse <- HR * se
tmp <- round(cbind(coef = beta, se = se, z = beta/se, p = 1 -   pchisq((beta/se)^2, 1),
HR = HR, HRse = HRse,
HRz = (HR - 1) / HRse, HRp = 1 - pchisq(((HR - 1)/HRse)^2, 1),
HRCILL = exp(beta - qnorm(.95, 0, 1) * se),
HRCIUL = exp(beta + qnorm(.95, 0, 1) * se)), 3)
return(tmp[1,])
})
cox_results=t(cox_results)
cox_results<-cox_results[cox_results[,4]<0.01,]
cox_results<-cox_results[order(as.data.frame(cox_results)$p),]
cox<-as.data.frame(cox_results)
write.csv(cox,'cox_results.csv',quote=F)
cox_expr<-data[rownames(data)%in%rownames(cox),]
write.csv(cox_expr,'cox_exprdata.csv',quote=F)

cox<-cox[1:20,c(4,5,9,10)]
cox<-as.data.frame(cox)
cox$name<-rownames(cox)
library(forestplot)
options(forestplot_new_page = FALSE)
clrs <- fpColors(box="blue",line="brown", summary="royalblue") 
hr=sprintf("%.3f",cox[,"HR"])
hrLow=sprintf("%.3f",cox[,"HRCILL"])
hrHigh=sprintf("%.3f",cox[,"HRCIUL"])
pVal=cox[,"p"]
pVal=ifelse(pVal<0.001, "<0.001", sprintf("%.3f", pVal))
tabletext <- 
    list(c(NA, rownames(cox)),
         append("pvalue", pVal),
         append("Hazard ratio",paste0(hr,"(",hrLow,"-",hrHigh,")")) ) 
HR<-cox[,2:4]
pdf(file="forest.pdf",
       width = 7,             #图片的宽度
       height = 7,            #图片的高度
       )
forestplot(tabletext, 
           rbind(rep(NA, 3), HR),
           col=clrs,
           graphwidth=unit(50, "mm"),
           xlog=T,
           lwd.ci=2,
           boxsize=0.4,
           xlab="Hazard ratio"
)
dev.off()
rm(cox_results,data,exprSet,HR,tabletext,hr,hrHigh,hrLow,mySurv,pVal,clrs)

data<-read.csv('cox_exprdata.csv',quote='',header=T,row.names=1,check.names=F)
phe<-read.csv('GSE25066_score.csv',quote='',header=T,row.names=1,check.names=F)
library(survival)
library(glmnet)
set.seed(1)
y=data.matrix(Surv(phe$RFS.time,phe$RFS))
fit_cv <- cv.glmnet(t(data), y, family = 'cox', maxit =20000)
pdf('fit_cv.pdf',width=5,height=5)
plot(fit_cv)
dev.off()
fit <- glmnet(t(data), y, family = "cox", maxit = 20000)
pdf("lambda.pdf",width=5,height=5)
plot(fit, xvar = "lambda", label = TRUE)
abline(v=log(fit_cv$lambda.min),lty=2)
dev.off()
get_coe <- function(the_fit,the_lamb){
Coefficients <- coef(the_fit, s = the_lamb)
Active.Index <- which(Coefficients != 0)
Active.Coefficients <- Coefficients[Active.Index]
re <- data.frame(rownames(Coefficients)[Active.Index],Active.Coefficients)
re <- data.table('var_names'=rownames(Coefficients)[Active.Index],
'coef'=Active.Coefficients)
re$expcoef <- exp(re$coef)
return(re[order(expcoef)])
}
library(data.table)
model<-as.data.frame(get_coe(fit_cv,fit_cv$lambda.min))
model<-model[,-3]
names(model)<-c('id','coef')
write.csv(model,'model.csv',quote=F)
data$id<-rownames(data)
sample<-model
sample<-merge(sample,data,by='id')
rownames(sample)<-sample$id
coef<-sample$coef
sample<-sample[,-1:-2]
sample<-sample*coef
sample<-apply(sample,2,sum)
sample<-as.data.frame(sample)
names(sample)<-'rs'
sample$level<-ifelse(sample$rs>median(sample$rs),'1','0')
library(survival)
library(survminer)
mySurv=with(phe,Surv(RFS.time, RFS))
group<-sample$level
m<-survfit(mySurv~group, data=phe)
pdf('km.pdf',onefile = FALSE)
ggsurvplot(m, pval=TRUE,
           conf.int =TRUE,
           xlab ="Time of years",risk.table =TRUE,ncensor.plot = TRUE,
           ggtheme =theme_light(),
           legend.title='Risk',legend.labs=c('low','high'),palette =c('blue','red'))
dev.off()
mol<-model[order(abs(model$coef)),]
pdf('coefficients.pdf',width=5,height=5)
par(mar=c(2,6,3,2)+0.1)
barplot(mol$coef,names.arg=mol$id,col='red',horiz =T,las=1,axis.lty=1,main='Coefficients')
dev.off()
sample<-cbind(sample,phe)
sample<-sample[order(sample$rs),]
sample$group<-ifelse(sample$level=='0','low','high')
pdf('line.pdf',width=5,height=4)
ggplot(sample,aes(x=c(1:178),y=rs))+geom_line(aes(col=group))+scale_color_manual(values=c('red','blue'))+theme_bw()+theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())+theme(legend.title=element_blank(),legend.position=c(0.93,0.95))+theme(panel.border=element_blank())+theme(axis.line=element_line(colour="black"))+labs(x='',y='Risk Score')
dev.off()
col<-ifelse(sample$RFS==0,'Alive','Dead')
pdf('point.pdf',width=5,height=4)
ggplot(sample,aes(c(1:178),RFS.time))+geom_point(aes(col=col))+theme_bw()+labs(x='',y='Survival (days)') +scale_color_manual(values=c('blue','red'))+theme(legend.title=element_blank(),legend.position=c(0.93,0.93))+theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())+theme(panel.border=element_blank())+theme(axis.line=element_line(colour="black"))+
geom_vline(xintercept=89.5,linetype="dotted")
dev.off()

re<-sample[,c(1,3,4)]
names(re)<-c('fp','event','time')
library(timeROC)
with(re,
      ROC <<- timeROC(T=time,
                      delta=event, 
                      marker=fp,
                      cause=1,
                      weighting="marginal",
                      times=c(3,4,5),
                      ROC = TRUE,
                      iid = TRUE)
 )
auc_1 = ROC$AUC[[1]]
auc_2 = ROC$AUC[[2]]
auc_3 = ROC$AUC[[3]]
dat = data.frame(tpr_1 = ROC$TP[,1],
                  fpr_1 = ROC$FP[,1],
                  tpr_2 = ROC$TP[,2],
                  fpr_2 = ROC$FP[,2],
                  tpr_3 = ROC$TP[,3],
                  fpr_3 = ROC$FP[,3])
library(ggplot2)
pdf('time_roc.pdf',width=4,height=4)
ggplot() + geom_line(data = dat,aes(x = fpr_1, y = tpr_1),color = "blue") + 
geom_line(data = dat,aes(x = fpr_2, y = tpr_2),color = "red")+
geom_line(data = dat,aes(x = fpr_3, y = tpr_3),color = "green")+
geom_line(aes(x=c(0,1),y=c(0,1)),color = "grey")+
theme_bw()+
annotate("text",x = .75, y = .25,label = paste("AUC of 3 year = ",round(auc_1,2)),color = "blue")+
annotate("text",x = .75, y = .15,label = paste("AUC of 4 years = ",round(auc_2,2)),color = "red")+
annotate("text",x = .75, y = .05,label = paste("AUC of 5 years = ",round(auc_3,2)),color = "green")+
scale_x_continuous(name  = "FPR")+
scale_y_continuous(name = "TPR")
dev.off()

expr<-merge(model,data,by='id')
rownames(expr)<-expr$id
expr<-expr[,-1:-2]
expr<-as.data.frame(t(expr))
expr$sample<-rownames(expr)
sample$sample<-rownames(sample)
expr<-merge(expr,sample,by='sample')
rownames(expr)<-expr$sample
expr<-expr[,-1]
expr<-expr[order(expr$level),]
df<-as.data.frame(expr$group)
names(df)<-c('Risk')
library('ComplexHeatmap')
library('circlize')
ha<-HeatmapAnnotation(df=df,col=list(Risk=c('high'='red','low'='blue')))
pdf('heatmap.pdf',width=6,height=5)
Heatmap(t(scale(expr[,1:23])),top_annotation = ha, cluster_columns = FALSE,name = "Legend",show_column_names=FALSE)
dev.off()
write.csv(sample,'GSE25066_sample.csv',quote=F)

data<-read.csv('GSE86166_expr.csv',quote='',header=T,row.names=1)
model<-read.csv('model.csv',quote='',header=T,check.names=F,row.names=1)
data$id<-rownames(data)
model<-merge(model,data,by='id')
coef<-model$coef
rownames(model)<-model$id
model<-model[,-1:-2]
data<-model*coef
data<-apply(data,2,sum)
data<-as.data.frame(data)
names(data)<-'rs'
phe<-read.csv('GSE86166_score.csv',quote='',header=T,check.names=F)
data$sample<-rownames(data)
names(phe)[c(1,4,5)]<-c('sample','event','time')
data<-merge(data,phe,by='sample')
data$Group<-ifelse(data$rs>median(data$rs),1,0)
library(survival)
library(survminer)
group<-data$Group
mySurv=with(data  ,Surv(time, event))
m<-survfit(mySurv~group, data=phe)
pdf('km.pdf',onefile = F)
ggsurvplot(m, pval=TRUE,
conf.int =TRUE,
xlab ="Time of months",risk.table =TRUE,ncensor.plot = TRUE,
ggtheme =theme_light(),
legend.title='Risk',legend.labs=c('low','high'),palette =c('blue','red'))
dev.off()

re<-data[,c(2,5,6)]
names(re)<-c('fp','event','time')
library(timeROC)
with(re,
      ROC <<- timeROC(T=time,
                      delta=event, 
                      marker=fp,
                      cause=1,
                      weighting="marginal",
                      times=c(36,48,60),
                      ROC = TRUE,
                      iid = TRUE)
 )
auc_1 = ROC$AUC[[1]]
auc_2 = ROC$AUC[[2]]
auc_3 = ROC$AUC[[3]]
dat = data.frame(tpr_1 = ROC$TP[,1],
                  fpr_1 = ROC$FP[,1],
                  tpr_2 = ROC$TP[,2],
                  fpr_2 = ROC$FP[,2],
                  tpr_3 = ROC$TP[,3],
                  fpr_3 = ROC$FP[,3])
library(ggplot2)
pdf('time_roc.pdf',width=4,height=4)
ggplot() + geom_line(data = dat,aes(x = fpr_1, y = tpr_1),color = "blue") + 
geom_line(data = dat,aes(x = fpr_2, y = tpr_2),color = "red")+
geom_line(data = dat,aes(x = fpr_3, y = tpr_3),color = "green")+
geom_line(aes(x=c(0,1),y=c(0,1)),color = "grey")+
theme_bw()+
annotate("text",x = .75, y = .25,label = paste("AUC of 3 year = ",round(auc_1,2)),color = "blue")+
annotate("text",x = .75, y = .15,label = paste("AUC of 4 years = ",round(auc_2,2)),color = "red")+
annotate("text",x = .75, y = .05,label = paste("AUC of 5 years = ",round(auc_3,2)),color = "green")+
scale_x_continuous(name  = "FPR")+
scale_y_continuous(name = "TPR")
dev.off()

rownames(data)<-data$sample
sample<-data[order(data$rs),]
sample$group<-ifelse(sample$Group=='0','low','high')
pdf('line.pdf',width=5,height=4)
ggplot(sample,aes(x=c(1:52),y=rs))+geom_line(aes(col=group))+theme_bw()+theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())+theme(legend.title=element_blank(),legend.position=c(0.93,0.95))+theme(panel.border=element_blank())+theme(axis.line=element_line(colour="black"))+labs(x='',y='Risk Score')+scale_color_manual(values=c('red','blue'))
dev.off()
col<-ifelse(data$event==0,'Alive','Dead')
pdf('point.pdf',width=5,height=4)
ggplot(data,aes(c(1:52),time))+geom_point(aes(col=col))+theme_bw()+labs(x='',y='Survival (months)') +scale_color_manual(values=c('blue','red'))+theme(legend.title=element_blank(),legend.position=c(0.93,0.93))+theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())+theme(panel.border=element_blank())+theme(axis.line=element_line(colour="black"))+geom_vline(xintercept=26.5,linetype="dotted")
dev.off()

expr<-as.data.frame(t(model))
expr$sample<-rownames(expr)
expr<-merge(expr,sample,by='sample')
rownames(expr)<-expr$sample
expr<-expr[,-1]
expr<-expr[order(expr$group),]
df<-as.data.frame(expr$group)
names(df)<-c('Risk')
library('ComplexHeatmap')
library('circlize')
ha<-HeatmapAnnotation(df=df,col=list(Risk=c('high'='red','low'='blue')))
pdf('heatmap.pdf',width=6,height=5)
Heatmap(t(scale(expr[,1:23])),top_annotation = ha, cluster_columns = FALSE,name = "Legend",show_column_names=FALSE)
dev.off()



